Чтобы решить проблему с CORS в вашем приложении NestJS, нужно настроить middleware для обработки CORS. Вот как можно это сделать в вашем коде:
Обновленный код с настройкой CORS
typescript
import { NestFactory } from '@nestjs/core';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
// Включение CORS
app.enableCors({
origin: 'http://localhost:3001', // Разрешить запросы только с этого домена
methods: 'GET,HEAD,PUT,PATCH,POST,DELETE', // Разрешенные методы
credentials: true, // Если нужно передавать куки
});
// Настройка Swagger
const config = new DocumentBuilder()
.setTitle('Documents API')
.setDescription('API для работы с документами')
.setVersion('1.0')
.addTag('documents')
.build();
const document = SwaggerModule.createDocument(app, config);
SwaggerModule.setup('api', app, document);
await app.listen(process.env.PORT ?? 3000);
}
bootstrap();
Что изменено:
- Добавлено
app.enableCors
:- Метод
enableCors
включает поддержку CORS в приложении. - Параметр
origin
указывает, с каких доменов разрешены запросы. В данном случае разрешены запросы сhttp://localhost:3001
. - Параметр
methods
определяет, какие HTTP-методы разрешены. - Параметр
credentials
разрешает передачу куки и других учетных данных.
- Метод
- Swagger остался без изменений:
- Swagger используется для документирования API и не влияет на CORS.
Пример запроса
После включения CORS, запросы с http://localhost:3001
к вашему серверу на http://127.0.0.1:3000
больше не будут блокироваться.Пример GET-запроса:
javascript
fetch('http://127.0.0.1:3000/documents?name=ment&typeId=5', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error('Ошибка:', error));
Рекомендации:
- Для разработки:
- Разрешите запросы с любого домена, используя
origin: '*'
. Это удобно для тестирования, но не рекомендуется для продакшена.
app.enableCors({ origin: '*', });
- Разрешите запросы с любого домена, используя
- Для продакшена:
- Ограничьте доступ только к доверенным доменам.
- Убедитесь, что сервер возвращает правильные заголовки CORS.
- Проверка CORS:
- Если проблема сохраняется, убедитесь, что ваш браузер не кэширует старые заголовки. Очистите кэш или используйте режим инкогнито.